package com.rengwuxian.coursecoroutines._4_flow

import kotlinx.coroutines.runBlocking

/**
 * Channel 和 Flow简介与对比
 * Channel、Flow、SharedFlow、StateFlow
 *
 * 只要学习协程，flow是必须要会的,是协程必备知识。
 * 流：事件流、数据流、状态流
 * 1.用的最频繁的：StateFlow：把状态值放到StateFlow，就可以被订阅了。使用SharedFlow来实现的。
 * 2.不过SharedFlow是事件订阅。
 * 3.状态订阅和事件订阅的区别：状态值，只要一订阅就必会给；而事件订阅，只有在订阅之后，事件到来，才能收到通知。
 * 4.SharedFlow内部是由Flow实现的。 Flow并不是订阅模型，是一个数据流工具。
 * 5.SharedFlow是事件流 event flow； Flow 是 data flow
 * 6.Channel 是协程间协作的工具。是Flow下层的关键支撑。提供在协程之间传递数据的能力。有点类似多条数据版的async
 * 7.如果你的数据不需要跨线程，就应该使用Flow，而不是Channel。
 *
 */
fun main() = runBlocking<Unit> {
  // StateFlow
//  SharedFlow // event flow
//  Flow // data flow
//  Channel
//  async {  }
}